# @Time : 2020/6/28 14:40
# @Author : Fioman 
# @Phone : 13149920693

charles = {'name':'Charles L. Dodgson','born':1832}
lewis = charles
print("lewis is charles = {}".format(lewis is charles))
print("id(lewis) = {},id(charles) = {}".format(id(lewis),id(charles)))

lewis["balance"] = 950
print("lewis = {} \ncharles = {} \n".format(lewis,charles))

# 冒充者alex
alex = {'name': 'Charles L. Dodgson', 'born': 1832, 'balance': 950}
print("charles == alex:{}".format(charles == alex))
# 但是alex不是charles
print("alex is charles:{}".format(alex is charles))

# 每个变量都有标识,类型和值.对象一旦创建,它的标识绝不会变;你可以把标识理解为对象在内存中的地址.is运算符表两个对象的标识.
# id()返回对象标识的整数表示.

"""
== 运算符和 is运算符之间的区别?
== 运算符比较的是两个对象的值(对象中保存的数据),而is比较的是对象的标识(地址)
通常我们关注的是变量的值,因此,我们经常使用==运算符.
但是,在变量和单例值之间比较时,应该使用is.例如和None进行比较的时候和True以及False进行比较的时候
is 运算符比==运算符快,因为它不能重载,所以python不用寻找并调用特殊的方法,而是直接比较两个整数ID.
而a == b是语法糖,等同于a.__eq__(b).继承自object的__eq__方法比较两个对象的ID,结果是和is是一样的.但是多数的内置类型
使用更有意义的方式覆盖了__eq__方法,会考虑对象的属性的值.
"""

